iT邦幫忙

2024 iThome 鐵人賽

DAY 17
0

DBSCAN (Density-Based Spatial Clustering of Applications with Noise) 是一種常用的密度基群聚演算法,適用於識別資料集中形狀不規則的群聚。DBSCAN透過密度的概念來識別核心點、邊界點以及噪聲點,並根據這些點來形成群聚。

DBSCAN的主要概念:

  1. Eps (ε): 這是鄰域的半徑範圍,即定義了資料點周圍的範圍,超過這個範圍的點不再被認為是相鄰的點。

  2. MinPts: 這是形成一個群聚的最少點數量,即在範圍為ε的鄰域中至少需要有MinPts個點,該資料點才會被視為核心點。

  3. 核心點 (Core Points): 如果某個點的ε鄰域內至少包含MinPts個點,那麼該點被稱為核心點。

  4. 邊界點 (Border Points): 一個點的ε鄰域內點的數量少於MinPts,但它是在某個核心點的ε鄰域內,那麼該點被稱為邊界點。

  5. 噪聲點 (Noise Points): 不屬於任何群聚的點即被標記為噪聲點。

DBSCAN的優點:

  • 不需事先指定群聚數量。
  • 可以識別任意形狀的群聚。
  • 對於含有噪聲的資料集有良好的表現。

DBSCAN的缺點:

  • 對Eps和MinPts的參數選擇較為敏感。
  • 在高維資料中,密度的概念可能變得不再有效。
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import DBSCAN
import matplotlib.pyplot as plt
import pandas as pd

iris = load_iris()
X = iris.data

X_scaled = StandardScaler().fit_transform(X)

dbscan = DBSCAN(eps=0.5, min_samples=5)
dbscan.fit(X_scaled)

labels = dbscan.labels_

df = pd.DataFrame(X, columns=iris.feature_names)
df['Cluster'] = labels
plt.figure(figsize=(10, 6))
plt.scatter(df.iloc[:, 0], df.iloc[:, 1], c=labels, cmap='viridis')
plt.title('DBSCAN Clustering of Iris Dataset')
plt.xlabel(iris.feature_names[0])
plt.ylabel(iris.feature_names[1])
plt.show()

上一篇
DAY16 層次聚類 16/30
下一篇
DAY18 Mean Shift 18/30
系列文
機器學習與深度學習背後框架與過程論文與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言